package com.itheima.project.utils;

import com.alibaba.ttl.TransmittableThreadLocal;
import lombok.extern.slf4j.Slf4j;

/**
 * @ClassName subjectContent.java
 * @Description 用户主体对象
 */
@Slf4j
public class SubjectContent {

    /***
     * @description 创建线程局部enterpriseThreadLocal变量
     */
    public static ThreadLocal<String> enterpriseThreadLocal = new ThreadLocal<String>() {
        @Override
        protected String initialValue() {
            return null;
        }
    };

    /***
     * @description 创建线程局部storeThreadLocal变量
     */
    public static ThreadLocal<String> storeThreadLocal = new ThreadLocal<String>() {
        @Override
        protected String initialValue() {
            return null;
        }
    };

    /***
     * @description 创建线程局部userVO变量
     */
    public static ThreadLocal<String> subjectThreadLocal = new ThreadLocal<String>() {
        @Override
        protected String initialValue() {
            return null;
        }
    };

    /***
     * @description 创建线程局部usetToken变量
     */
    public static ThreadLocal<String> usetTokenThreadLocal = new ThreadLocal<String>() {
        @Override
        protected String initialValue() {
            return null;
        }
    };

    /**
     * 是否开启租户隔离(预留前端配置方式)
     */
    private static final ThreadLocal<Boolean> tenantEnableThreadLocal = new TransmittableThreadLocal<>();

    // 提供线程局部变量set方法
    public static void setEnterprise(String enterpriseId) {
        enterpriseThreadLocal.set(enterpriseId);
    }

    //清空当前线程，防止内存溢出
    public static void removeEnterprise() {
        enterpriseThreadLocal.remove();
    }

    // 提供线程局部变量get方法
    public static String getEnterprise() {
        return enterpriseThreadLocal.get();
    }

    // 提供线程局部变量set方法
    public static void setStore(String storeId) {
        storeThreadLocal.set(storeId);
    }

    //清空当前线程，防止内存溢出
    public static void removeStore() {
        storeThreadLocal.remove();
    }

    // 提供线程局部变量get方法
    public static String getStore() {
        return storeThreadLocal.get();
    }

    // 提供线程局部变量set方法
    public static void setSubject(String subject) {
        subjectThreadLocal.set(subject);
    }
    // 提供线程局部变量get方法
    public static String getSubject() {
        return subjectThreadLocal.get();
    }
    //清空当前线程，防止内存溢出
    public static void removeSubject() {
        subjectThreadLocal.remove();
    }

    // 提供线程局部变量set方法
    public static void setTenantEnable(Boolean enable) {
        tenantEnableThreadLocal.set(enable);
    }
    // 提供线程局部变量get方法
    public static Boolean getTenantEnable() {
        return tenantEnableThreadLocal.get();
    }
    // 清空当前线程，防止内存溢出
    public static void removeTenantEnable() {
        tenantEnableThreadLocal.remove();
    }

    // 提供线程局部变量set方法
    public static void setUserToKen(String userToken) {
        usetTokenThreadLocal.set(userToken);
    }

    // 提供线程局部变量get方法
    public static String getUserToKen() {
        return usetTokenThreadLocal.get();
    }
    // 清空当前线程，防止内存溢出
    public static void removeUserToKen() {
        usetTokenThreadLocal.remove();
    }

}
